iT邦幫忙

2021 iThome 鐵人賽

DAY 29
8
Software Development

奇怪的知識增加了!原來程式還可以這樣用?!系列 第 29

[Day29] 不敢把聊天紀錄上傳到分析網站? 自己用Python分析LINE聊天紀錄!

  • 分享至 

  • xImage
  •  

大家會不會很好奇跟朋友在LINE上最常講的話是什麼? 或是跟朋友講了幾通電話呢?
前陣子很流行把LINE聊天紀錄傳到分析網站去分析各種數據,
但需要把聊天紀錄傳到該網站><
雖然開發者說不會有個資外洩問題,但是不怕一萬只怕萬一,還是自己寫程式分析最安全~

使用環境

步驟解析

  1. 先到LINE下載和想分析對象的對話紀錄(txt檔)
    https://ithelp.ithome.com.tw/upload/images/20210928/20133286iWNC8c34Fr.png

  2. 用jieba中文分詞工具將下載的文字檔做中文分詞,找出出現最多次的詞,而不是單字。

  3. 去除不需要分析的資料,例如上午、下午、數字(訊息傳送時間)。

  4. 將分析結果用cutecharts圖表顯示。

程式碼

#encoding=utf-8
import jieba
import jieba.analyse
from cutecharts.charts import Bar
from cutecharts.charts import Pie


content = open('line.txt', 'rb').read()
words = jieba.lcut(content) # 使用jieba這個library對文檔內容進行分詞
counts = {} # 此為由文字內容對應到出現次數的dictionary

# 進行統計
for word in words:
    if len(word) <= 1: # 排除單個字
        continue
    elif word.isdigit(): # 排除數字
        continue
    else:
        counts[word] = counts.get(word, 0) + 1

# 刪除不重要的詞語
text=' '.join(words)
excludes = {'\r\n','下午','上午','...'} # LINE紀錄會有很多換行,如不去掉分析完會顯示
for exword in excludes:
    try:
        del(counts[exword])
    except:
        continue
    
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True) # 根據單詞出現次數進行排序

# 將出現次數最多的幾個詞畫成圖表
top_words = []
top_counts = []
i = -1
while len(top_words) <= 10:
    i += 1
    word, count = items[i]
    if word == "通話" or word == "照片" or word == "影片" or word == "貼圖" or word == "你的名字" or word == "對方名字":
        continue
    top_words.append(word)
    top_counts.append(count)
chart = Bar("關鍵字圖表")
chart.set_options(labels = top_words, x_label="單詞", y_label="出現次數")
chart.add_series("次數", top_counts)

chart2 = Pie("通話/影片/照片數統計")
chart2.set_options(labels=['照片', '影片', '通話'])
chart2.add_series([counts.get("照片", 0), counts.get("影片", 0), counts.get("通話", 0)])

chart3 = Pie("傳送訊息量")
chart3.set_options(labels=['你的名字', '對方'],inner_radius=0)
chart3.add_series([counts.get("你的名字", 0), counts.get("對方名字", 0)])

chart.render(dest="關鍵字.html")
chart2.render(dest="通話/影片/照片數統計.html")
chart3.render(dest="傳送訊息量.html")

成果發表會
https://ithelp.ithome.com.tw/upload/images/20210929/20133286rYivVCvpco.png

雖然要等個幾秒讓jieba分詞,但是整體速度還是很快,而且自己做出來的感覺也不一樣~


上一篇
[Day28] 戲弄老闆! 教你用Machine Learning將老闆玩弄於股掌之間!
下一篇
[Day30] 完結灑花❀ 看完賽心得順便用Python畫 3D 漸層花朵!
系列文
奇怪的知識增加了!原來程式還可以這樣用?!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

1
Pulin
iT邦新手 5 級 ‧ 2021-09-29 13:56:56

圖表的畫風好可愛/images/emoticon/emoticon37.gif

lulu_meat iT邦研究生 5 級 ‧ 2021-09-29 14:14:46 檢舉

對阿!!超萌的! 雖然看起來很不專業><

1
dscwferp
iT邦高手 1 級 ‧ 2021-09-29 21:49:51

cutecharts 這個好!
想 放到公司 給老闆看看!

我要留言

立即登入留言